java.util.List是一种链表数据结构的接口,
java.util.ArrayList和LinkedList是链表的实现类。
数组中每一项占用一个特定的位置,通过下标可以直接访问;
而链表寻找一个元素的唯一方法是沿着这个链表一直找下去。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据节点的逻辑顺序是通过链表中的指针(或引用)链接次序实现的。链表中的每个数据元素称为节点(Node),结点可以在运行时动态生成。
每个节点(Node)包括两部分:存储数据元素的数据域(data),存储下一个结点地址的指针域(next)。
N个节点依次构成的链表,称为线性链表。
如果链表对每个节点只包含一个指针域,则称单链表;如果可以从两个方向遍历,则称为双向链表。
实现链表:
1.为了表示一个节点,可以创建一个Node类。它包含两个成员变量:Object(也可以为其它基本类型)类型的数据,和对下一个节点的引用Node类型。
2.另外,由于每个节点肯定需要包含数据,因此Node类可以有一个传入数据参数的构造方法。
3.一般需要创建链表的头结点Node head,它始终表示链表的头一个节点。
1 | class Node{ |
一个链表类是需要提供给其它代码使用的,因此它需要提供一些接口方法:
1.判断链表为空isEmpty()
判断head是否为null
2.获取链表节点的个数size()
从head依次往下走,直到最后一个节点的next为null。
3.清空
head = null;
4.得到指定位置的节点或数据
5.插入
(1)在表头插入
把新节点的next指向head;将head指向新节点。
(2)在表尾插入
把最后一个节点的next指向新的节点。
(3)在中间插入
可以在Node类中新增Node previous变量,指向上一个节点。(双向链表)
把原位置的前一个节点的next指向新节点,新节点的next指向原来位置上的节点。
1 | /**实现一个链表**/ |